﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using DAO.Model;
using DAO.Bussiness.Repository;

namespace Restaurante
{
    public partial class comandas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            lblError.Text = "";   
         
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("home.aspx");
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            ComandaDetalleRepository cdr = new ComandaDetalleRepository();
            Comanda_Detalle cd = new Comanda_Detalle();
            Menues menu = new Menues();
            MenuesRepository mr = new MenuesRepository();

            Menues menu2 = new Menues();
            MenuesRepository mr2 = new MenuesRepository();

            Menu_Precargado meP = new Menu_Precargado();
            MenuPrecargadoRepository mepR = new MenuPrecargadoRepository();
            bool error = false;
            try
            {
                if (txbNroComanda.Text == "")
                {
                    lblError.Text = "Debe seleccionar una comanda!!!.";
                    error = true;
                    return;
                }

                cd.Id_Usruario = Convert.ToInt32(ddlMozoComanda.SelectedItem.Value);                
               
                if (!(txbCantPlato.Text == ""))  cd.Cantidad_Menu = Convert.ToInt32(txbCantPlato.Text);

                if (!(txbCantMenu.Text == "")) cd.Cantidad_Menu_Precargado = Convert.ToInt32(txbCantMenu.Text);
               
                cd.Id_Estado = Convert.ToInt32(ddlEstado.SelectedItem.Value);
                cd.Nro_Comanda = Convert.ToInt32(txbNroComanda.Text);               

                if (!(ddlPlato.SelectedItem.Value == null || Convert.ToInt32(ddlPlato.SelectedItem.Value) == 0))
                {
                    menu.Id_Bebida = Convert.ToInt32(ddlBebida.SelectedItem.Value);
                    menu.Id_Plato = Convert.ToInt32(ddlPlato.SelectedItem.Value);
                    menu.Descripcion = ddlPlato.SelectedItem.ToString();

                    mr.Add(menu);
                    mr.Save();

                    Int32 idMenu = menu.Id_Menu;
                    menu2 = mr2.GetBy(u => u.Id_Menu.Equals(idMenu)).Single();
                    menu2.Comanda_Detalles.Add(cd);
                    mr2.Update(menu2);
                    mr2.Save();
                }

                if (!(ddlMenuPre.SelectedItem.Value == null || Convert.ToInt32(ddlMenuPre.SelectedItem.Value) == 0))
                {
                    Int32 idMenuPre = Convert.ToInt32(ddlMenuPre.SelectedItem.Value);
                    meP = mepR.GetBy(u => u.Id_MenuPrecargado.Equals(idMenuPre)).Single();  // linq para obtner menu
                    meP.Comanda_Detalle.Add(cd);
                    mepR.Update(meP);
                    mepR.Save();
                }               
            }
            catch (Exception ex){
                error = true;
            }            
            finally
            {
                if (!error)
                {                                                                                    
                    CleanControl(this.Controls);
                    Response.Redirect("comandas.aspx");
                } else lblError.Text = "Error durante la grabación !!!.";
            }
        }
        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is Calendar)
                    ((Calendar)control).SelectedDate = System.DateTime.Now;
                else if (control.HasControls())
                    //Esta linea detécta un Control que contenga otros Controles
                    //Así ningún control se quedará sin ser limpiado.
                    CleanControl(control.Controls);
            }
        }

        protected void gvComandas_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow row = gvComandas.SelectedRow;
            txtMesa.Text = row.Cells[3].Text;
            txbNroComanda.Text = row.Cells[1].Text;



        }

        protected void btnCerrarMesa_Click(object sender, EventArgs e)
        {
            Comanda c = new Comanda();
            ComandaRepository cr = new ComandaRepository();
            Factura f = new Factura();
            FacturaRepository fr = new FacturaRepository();
            Mesa me = new Mesa();
            MesaRepository mr = new MesaRepository();

            try
            {                
                if (txbNroComanda.Text == "")
                {
                    lblError.Text = "Debe seleccionar una comanda!!!.";
                    return;
                }
                else {
                    Int32 nroCom = Convert.ToInt32(txbNroComanda.Text);
                    c = cr.GetBy(u => u.Nro_Comanda.Equals(nroCom)).Single();
                    c.Id_Estado = 3;
                    
                    me = mr.GetBy(u => u.Id_Mesa.Equals(c.Id_Mesa)).Single();
                    me.Id_Estado = 5;
                    mr.Update(me);
                    mr.Save();

                    f.Id_Comanda = nroCom;
                    f.Id_Usuario = 9;
                    f.Fecha = System.DateTime.Now;
                    f.Monto = 100;

                    fr.Add(f);
                    fr.Save();
                    cr.Update(c);
                    cr.Save();

                    Response.Redirect("comandas.aspx");
                }
            }
            catch (Exception ex) {
                lblError.Text = ex.ToString();
            
            }
        }
    }
}

